package com.jamlu.framework.ui.status;

import android.content.Context;
import android.support.annotation.NonNull;
import android.view.ViewGroup;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.jamlu.framework.ui.view.IBaseView;

import java.util.List;

import io.reactivex.disposables.CompositeDisposable;

/**
 * 传入布局的ViewGroup，在使用非官方的ViewGroup时，必须在外面嵌套多一层官方的ViewGroup,类似使用第三方下拉布局，就要再包裹多一层FrameLayout或者其他
 * Created by DMing at 2018/2/26 0026
 */

public class StatusUtils {

    /**
     * 显示Toast信息
     * @param mContext 上下文
     * @param compositeDisposable Disposable池
     * @param statusRequest 请求
     */
    public static void initStatusToast(@NonNull Context mContext, @NonNull CompositeDisposable compositeDisposable, @NonNull StatusRequest statusRequest){
        new StatusToast(mContext,compositeDisposable,statusRequest);
    }

    /**
     * 显示对话框式的请求，可以选择点击是否消失
     * @param iBaseView 基础View
     * @param compositeDisposable Disposable池
     * @param cancelable 是否能返回取消
     * @param statusRequest 请求
     */
    public static void initStatusDialog(@NonNull IBaseView iBaseView, @NonNull CompositeDisposable compositeDisposable, boolean cancelable,@NonNull StatusRequest statusRequest){
        new StatusDialog(iBaseView,compositeDisposable,cancelable,statusRequest);
    }

    /**
     * 显示对话框式的请求，点击消失
     * @param iBaseView 基础View
     * @param compositeDisposable Disposable池
     * @param statusRequest 请求
     */
    public static void initStatusDialog(@NonNull IBaseView iBaseView, @NonNull CompositeDisposable compositeDisposable,@NonNull StatusRequest statusRequest){
        new StatusDialog(iBaseView,compositeDisposable,true,statusRequest);
    }

    /**
     * 能对官方的ViewGroup,ListView,RecyclerView,直接变为状态布局，自定义的View不一定行，看对view是怎样处理
     * @param viewGroup 需要设置的状态布局
     * @param mCompositeDisposable Disposable池
     * @param statusRequest 请求
     */
    public static void initStatusOfficialView(@NonNull ViewGroup viewGroup, @NonNull CompositeDisposable mCompositeDisposable, @NonNull StatusRequest statusRequest){
        new StatusView(viewGroup,mCompositeDisposable,statusRequest);
    }

    /**
     * 进入这个布局，肯定有数据了，而且状态布局消失了，这个针对SmartRefreshLayout和RecyclerView，其他布局：GoHome
     * 这个布局初始化后不允许随意remove，因为在addOnAttachStateChangeListener中监听离开就释放所有资源
     * @param viewGroup 需要设置的Smart+RecyclerView状态布局
     * @param baseQuickAdapter 只支持baseQuickAdapter
     * @param mCompositeDisposable Disposable池
     * @param statusRequest 请求
     */
    public static StatusSmartRvView initStatusSmartRvView(@NonNull ViewGroup viewGroup, @NonNull BaseQuickAdapter baseQuickAdapter, @NonNull CompositeDisposable mCompositeDisposable, @NonNull StatusRequest statusRequest){
        StatusSmartRvView statusRvView = new StatusSmartRvView(viewGroup);
        statusRvView.initEvent(viewGroup,baseQuickAdapter,mCompositeDisposable,statusRequest);
        StatusView statusView = new StatusView(viewGroup,mCompositeDisposable,statusRequest);
        statusView.setSubIStatus(statusRvView);
        return statusRvView;
    }

    /**
     * 进入这个布局，肯定有数据了，而且状态布局消失了，这个针对SmartRefreshLayout和RecyclerView，其他布局：GoHome
     * 这个布局初始化后不允许随意remove，因为在addOnAttachStateChangeListener中监听离开就释放所有资源
     * @param viewGroup 需要设置的Smart+RecyclerView状态布局
     * @param baseQuickAdapter 只支持baseQuickAdapter
     * @param list list的类型必须与baseQuickAdapter一致
     * @param mCompositeDisposable Disposable池
     * @param statusRequest 请求
     */
    @SuppressWarnings("unchecked")
    public static StatusSmartRvView hasDataSmartRvView(@NonNull ViewGroup viewGroup, @NonNull BaseQuickAdapter baseQuickAdapter,@NonNull List list, @NonNull CompositeDisposable mCompositeDisposable, @NonNull StatusRequest statusRequest){
        StatusSmartRvView statusRvView = new StatusSmartRvView(viewGroup);
        statusRvView.initEvent(viewGroup,baseQuickAdapter,mCompositeDisposable,statusRequest);
        statusRvView.getDataList().addAll(list);
        statusRvView.getBaseQuickAdapter().setNewData(statusRvView.getDataList());
        return statusRvView;
    }

}
